<?php

declare(strict_types=1);

namespace Zms\Validate\Rule;

use Zms\Unit\Is;

/**
 * 邮政编码验证器
 */
class ZipcodeValidate extends RuleAbstract
{
    /**
     * 默认错误消息
     * @var string
     */
    protected $_error = '{label}不是有效的邮政编码';

    /**
     * 开始验证
     *
     * @param mixed $value 待验证的值
     * @param string $label 字段标签，用于替换错误信息中的占位符
     * @return bool 验证是否通过
     */
    public function validate($value, string $label = ''): bool
    {
        // 检查输入是否为字符串或数字类型
        if (is_string($value) || is_numeric($value)) {
            // 如果允许跳过空值且值为空，则直接返回true
            if (Is::empty($value) && $this->_noSkipping === true) {
                $this->_value = $value;
                return true;
            }
            // 使用正则表达式检查输入是否符合中国邮政编码格式（6位数字）
            if (preg_match('/^[1-9]\d{5}$/', strval($value))) {
                $this->_value = $value;
                return true;
            }
        }
        // 如果验证失败，添加错误信息并返回false
        return $this->addError($this->_error, $label);
    }
}